#pragma once

#include <vector>
#include <cstdint>
#include <string>

namespace sysmonitor {
namespace cpu {
    
// CPU时间结构体，用于计算CPU使用率
struct CpuTime {
    uint64_t total;    // 总CPU时间
    uint64_t idle;     // 空闲时间 (idle + iowait)
};

// CPU使用率信息
struct CpuUsage {
    uint64_t totalUsage = 0.0;
    std::vector<double> coreUsages;   // 每个核心的使用率
};

// CPU信息结构体
struct CpuInfo {
    std::string modelName;    // CPU型号
    int cores = 0;            // 物理核心数
    int threads  = 0;         // 逻辑核心数(线程数)
    double mhz = 0.0;         // 主频(MHz)
    uint64_t cacheSizeKB = 0; // 缓存大小(KB)
};

// 获取CPU时间信息(总CPU + 每个核心)
std::vector<CpuTime> getCpuTimes();

// 计算CPU使用率
CpuUsage calculateCpuUsage(const std::vector<CpuTime>& now, const std::vector<CpuTime>& prev);

// 获取CPU信息
CpuInfo getCpuInfo();

}  // namespace cpu
}  // namespace sysmonitor

